<?php
include_once '../gerenciadores/AutoloadGerenciadores.php';

class RepositorioMapaDeNotas{
	private static $instancia;
	
	private function __construct(){
	}
	
	public static function getInstancia(){
		if(!isset(self::$instancia)){
			$class = __CLASS__;
			self::$instancia = new $class;
		}
		return self::$instancia;
	}
	
	public static function adicionaNota(Aluno $aluno, Nota $nota, Disciplina $disciplina){	
		$idDisciplina = $disciplina->getIdDisciplina();
		$idPessoa = $aluno->getIdPessoa();
		$avaliacao = $nota->getAvaliacao();
		
				$tabNota = $nota->getNota();
				
				$sql = "INSERT INTO `tnotas`
					(`idpessoa`, `iddisciplina`, `nota`, `avaliacao`)
					VALUES ('";
				$sql .= $idPessoa."','";
				$sql .= $idDisciplina."','";
				$sql .= $tabNota[$avaliacao]."','";
				$sql .= $avaliacao;
				$sql .= "');";
				
				
				__autoload("Conexao");
				Conexao::executaSql($sql);
	}
	
	public static function montaMapaDeNotas(Pessoa $pessoa){
		$sql = "SELECT disc.iddisciplina, disc.sigla, disc.cargahoraria, disc.disciplina , nota.nota, nota.avaliacao,
				curso.siglacurso, curso.nomecurso, curso.idcurso
				 FROM `tnotas` nota
				 INNER JOIN `tdisciplina` disc ON (nota.iddisciplina=disc.iddisciplina)
				 INNER JOIN `tcursos` curso ON (curso.idcurso = disc.idcurso)
				 WHERE idpessoa = '".$pessoa->getIdPessoa()."'";
		$tabela = Conexao::tabelaSql($sql);
		$i=0;
		foreach($tabela as $linha){
			$disciplina = new Disciplina();
			$disciplina->setSiglaDisciplina($linha['sigla']);
			$disciplina->setCargaHoraria($linha['cargahoraria']);
			$disciplina->setNomeDisciplina($linha['disciplina']);
			$disciplina->setIdDisciplina($linha['iddisciplina']);
			
			__autoload("Curso");
			$curso = new Curso();
			$curso->setSiglaCurso($linha['siglacurso']);
			$curso->setNomeCurso($linha['nomecurso']);
			$curso->setIdCurso($linha['idcurso']);
			
			$disciplina->setCurso($curso);
			
			$nota[$i] = new Nota($linha['nota'], $linha['avaliacao'], $pessoa);
			$nota[$i]->setDisciplina($disciplina);
		$i++;
		}
		
		try {
			return $nota;
		}catch (HistoricoException $e){
			echo $e->getMessage();
		}
	}
	
	
	public static function alteraNota(Nota $nota, Disciplina $disciplina){
		$aluno = $nota->getPessoa();
		$avaliacao = $nota->getAvaliacao();		
		try{
			$sql = "UPDATE `tnotas` SET ";
			
			if(!is_null($nota)){
			$atualizaNota = $nota->getNota();
			
				$sql = $sql."`nota` = '".$atualizaNota[$avaliacao]."'";
					
			}
			$sql = $sql." WHERE `idpessoa`='".$aluno->getIdPessoa()."'
				AND `iddisciplina`='".$disciplina->getIdDisciplina()."'
				AND `avaliacao`='".$avaliacao."';";
			
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}
		catch (NotaAtualizaException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function deletaNota(Nota $nota, Aluno $aluno){
		$disciplina = $nota->getDisciplina();
		try{
			$sql = "DELETE FROM ";
			$sql = $sql."WHERE `idpessoa`='".$aluno->getIdPessoa()."'
				AND `iddisciplina`='".$disciplina->getIdDisciplina()."'
				AND `avaliacao`='".$nota->getAvaliacao()."';";
			
			Conexao::executaSql($sql);
		}
		catch (NotaDeletaException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function exibeNotaAlunos(Turma $turma, Disciplina $disciplina, $avaliacao){
		$sql = "SELECT  n.idpessoa,pes.cpf, pes.cargo, pes.instituicao, pes.nome, pes.nome, n.iddisciplina, n.nota, n.avaliacao, mat.matricula FROM tnotas n 
				INNER JOIN tcadastro cad ON (n.idpessoa = cad.idpessoa)
				INNER JOIN tpessoa pes ON (n.idpessoa = pes.idpessoa)
				LEFT JOIN t_matricula mat ON (mat.idpessoa = n.idpessoa)
				 WHERE iddisciplina = '".$disciplina->getIdDisciplina()."' AND idturma = '".$turma->getIdTurma()."' AND avaliacao='".$avaliacao."'
				 ORDER BY pes.nome;";
		
		__autoload("Conexao");
		$tab = Conexao::tabelaSql($sql);
		
		__autoload("MapaDeNotas");
		$mapaDeNotas = new MapaDeNotas();
		$mapaDeNotas->setDisciplina($disciplina);
		
		$i=0;
		foreach ($tab as $notas){		
			$pessoa = new Pessoa($notas['cpf'], $notas['nome'], $notas['cargo'], $notas['instituicao']);
			$pessoa->setIdPessoa($notas['idpessoa']);

			__autoload("Nota");
			$nota[$i] = new Nota($notas['nota'], $avaliacao, $pessoa);
			$i++;		
		}
		
		$mapaDeNotas->setNota($nota);
		
		
		if(isset($mapaDeNotas)){
			return $mapaDeNotas;
		}else{
			__autoload("HistoricoException");
			$e = new HistoricoException();
			echo $e->getMessage();
		}
		
	}
	
	public static function imprimeMapaDenotas(Curso $curso){
		$sql = "SELECT p.cargo, p.nome, p.instituicao, t.turma, ";
		
		__autoload("RepositorioDisciplina");
		$tabDisciplina = RepositorioDisciplina::getTabelaDisciplinaPorCurso($curso);
		
		foreach ($tabDisciplina as $disciplina){
			$sql .= "(SELECT AVG(b.nota) FROM tnotas b WHERE b.iddisciplina = '".$disciplina->getIdDisciplina()."' AND
					b.idpessoa = p.idpessoa) AS '".$disciplina->getSiglaDisciplina()."', ";
		}
		$sql = substr($sql, 0, -2);
		
		$sql .= " FROM tpessoa p ";
		$sql .= "INNER JOIN tcadastro cad ON (cad.idpessoa = p.idpessoa) ";
		$sql .= "INNER JOIN tturma t ON (t.idturma = cad.idturma) ";
		$sql .= "INNER JOIN tcursos cs ON (t.idcurso = cs.idcurso) ";
		$sql .= "WHERE cad.idcurso = '".$curso->getIdCurso()."' AND t.datafim = '0000-00-00' AND cad.tipo_vinculo = '2'
				ORDER BY turma, nome;";

			
		
			$arquivo = "resultadofinal".$curso->getSiglaCurso();
		__autoload("Conexao");
		$planilha = Conexao::imprimePlanilha($sql, $arquivo);
		
		return $planilha;	
	}
	
}
?>